A virtual machine (VM) provides virtualization between a process and a host such that the process may be executed independently of the host. A host is typically a physical machine (e.g., a processor) or an application (e.g., an operating system) on which a VM is executed to provide hardware compatibility or platform independence. A VM that is executing on one host (i.e., a source host) may be relocated, or migrated, to another host (i.e., a destination host).
Existing migration implementations require the transfer of a portion of the source host's VM memory that is required by the VM to execute on the destination host to the destination host while the VM is still executing on the source host. The VM then suspends execution on the source host and resumes execution on the destination host once the state of the VM is transferred from the source host to the destination host.
Later, the remaining VM memory on the source host is transferred to the destination host. Unfortunately, the VM executing on the destination host may be exposed to faults on the source host. If a fault occurs and the source host fails, the remaining VM memory may be lost causing the VM to fail. To avoid VM failure, the remaining VM memory may be transferred to the destination host before the VM resumes execution on the VM host. Such an implementation, however, may lead to the VM suspending execution for an unacceptably long period of time, which is undesirable.